package com.atpuge.oss.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.atpuge.oss.service.OssService;
import com.atpuge.oss.utils.ConstantPropertiesUtils;

import org.joda.time.DateTime;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.ByteArrayInputStream;

import java.util.UUID;

/**
 * @author by sun
 * @date 2021/6/13.10:37
 */

@Service
public class OssServiceImpl implements OssService {
//    上传头像到OSS
    @Override
    public String uploadFileAvatar(MultipartFile file) {

        // Endpoint以杭州为例，其它Region请按实际情况填写。
        String endpoint = ConstantPropertiesUtils.END_POINT;
// 阿里云主账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维，请登录RAM控制台创建RAM账号。
        String accessKeyId = ConstantPropertiesUtils.ACCESS_KEY_ID;
        String accessKeySecret = ConstantPropertiesUtils.ACCESS_KEY_SECRET;
        String bucketName = ConstantPropertiesUtils.BUCKET_NAME;

        try{
    // <yourObjectName>上传文件到OSS时需要指定包含文件后缀在内的完整路径，例如abc/efg/123.jpg。
            //使用file流的 getOriginalFilename 方法获取图片的原始名称
            String objectName = file.getOriginalFilename();

//         1, 在文件的名称里面添加随机唯一的值，且调用replace方法。去除uuid中的_
            String uuid = UUID.randomUUID().toString().replace("_","");
//            将随机生成的UUID值，添加到文件名前
            objectName = uuid + objectName  ;
//         2，把文件按照日期进行分类
            //获取当前的日期
            String datePath = new DateTime().toString("yyyy/MM/dd");
            System.out.println(datePath);
            //将日期与文件名进行拼接
            objectName = datePath+"/"+objectName;
            System.out.println(objectName);


            // 创建OSSClient实例。
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

    // 上传文件到指定的存储空间（bucketName）并将其保存为指定的文件名称（objectName）。
            String content = "Hello OSS";
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));

    // 关闭OSSClient。
            ossClient.shutdown();
    //        将文件上传之后的文件路径返回
    //        没有对应的方法，所以需要根据上文的对应的变量将阿里云OSS的路径手动拼接出来，并进行返回
    //                阿里云的图片的URL地址：https://edu-20210613.oss-cn-beijing.aliyuncs.com/350-2.jpg
            String url = "https://"+bucketName+"."+endpoint+"/"+objectName;
            return url;
        }catch(Exception e){
            e.printStackTrace();
            return null;
        }

    }
}
